package com.example.demo.service;

import com.example.demo.domain.base.BaseEntity;
import com.example.demo.vo.PageRequest;
import com.example.demo.vo.PageResult;
import org.hibernate.criterion.Criterion;

import java.util.List;

/**
 * @author Jack
 * @Title: 基础服务
 * @Description: 基础服务
 * @date 2018年1月7日14:11:27
 */
public interface BaseService<E extends BaseEntity> {

    /**
     * 保存实体
     *
     * @param entity 实体对象
     * @reEurn 实体主键
     */
    <E extends BaseEntity> void save(E entity);

    /**
     * 更新实体
     *
     * @param entity 实体对象
     * @reEurn 实体主键
     */
    <E extends BaseEntity> void update(E entity);

    /**
     * @param entity 实体类
     * @throws
     * @Title: 新增或修改实体类
     * @Description: 新增或修改实体类
     */
    <E extends BaseEntity> void saveOrUpdate(E entity);

    /**
     * @param id 实体类Id
     * @throws
     * @Title: 根据ID查找实体类
     * @Description: 根据ID查找实体类
     */
    <E extends BaseEntity> E findById(Long id);

    /**
     * @param criterion 条件
     * @throws
     * @Title: 按照条件进行删除
     * @Description: 按照条件进行删除
     */
    <E extends BaseEntity> void deleteByRestrictions(Criterion... criterion);

    /**
     * @throws
     * @Title: 按照条件进行检索
     * @Description: 按照条件进行检索
     */
    <E extends BaseEntity> List<E> findByRestrictions(Criterion... criterion);

    /**
     * @throws
     * @Title: 按照条件分页查询
     * @Description: 按照条件分页查询
     */
    <E extends BaseEntity> PageResult<E> getPage(PageRequest pageRequest, Criterion... criterion);

}
